package com.tn.dao.camera;

import com.tn.controller.alarm.common.model.EleFenceDO;
import com.tn.controller.alarm.common.model.camera.entity.CameraRecordInfoDO;
import com.tn.controller.alarm.common.model.camera.entity.PositionAreaDO;
import com.tn.controller.alarm.common.model.camera.vo.AreaVideoVO;
import com.tn.controller.alarm.common.model.camera.vo.CameraVO;
import com.tn.controller.alarm.common.model.camera.vo.TimeOfTruckVO;
import com.tn.controller.alarm.common.model.camera.vo.TruckTrialCameraVO;
import com.tn.controller.alarm.common.model.rpm.CameraAreaListDTO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * 摄像头监控数据访问层
 *
 * @program: tn_aucy_java
 * @author: yangjiayao
 * @create: 2022/1/7
 */
@Repository
public interface ICameraDao {
    /**
     * 查询区域信息
     *
     * @return 区域
     */
    List<PositionAreaDO> queryArea();

    /**
     * 新增摄像头
     *
     * @param camera 摄像头信息
     * @return 数量
     */
    int addCamera(@Param("camera") CameraVO camera);

    /**
     * 根据code校验是否存在摄像头
     *
     * @param code code
     * @return 是否存在
     */
    int checkExistsCameraByCode(@Param("code") String code);

    /**
     * 根据IP校验是否存在摄像头
     *
     * @param ip ip
     * @return 是否存在
     */
    int checkExistsCameraByIp(@Param("ip") String ip);

    /**
     * 根据IP校验是否存在摄像头
     *
     * @param name name
     * @return 是否存在
     */
    int checkExistsCameraByName(@Param("name") String name);

    /**
     * 根据ID校验是否存在区域
     *
     * @param id ID
     * @return 是否存在
     */
    int checkExistsArea(@Param("id") int id);

    /**
     * 添加摄像头围栏
     *
     * @param eleFenceDO 围栏信息
     * @return 数量
     */
    int addCameraFence(@Param("eleFenceDO") EleFenceDO eleFenceDO);

    /**
     * 删除摄像头围栏
     *
     * @param id ID
     * @return 数量
     */
    int deleteCameraFence(@Param("id") int id, @Param("type") String type);

    /**
     * 删除摄像头
     *
     * @param id ID
     * @return 删除摄像头
     */
    int deleteCamera(@Param("id") int id);

    /**
     * 根据ID查询摄像头信息
     *
     * @param id ID
     * @return 摄像头信息
     */
    CameraVO queryCameraById(@Param("id") int id);

    /**
     * 修改摄像头信息
     *
     * @param camera 摄像头信息
     * @return 数量
     */
    int modifyCamera(@Param("camera") CameraVO camera);

    /**
     * 修改摄像头围栏
     *
     * @param eleFenceDO 围栏信息
     * @return 数量
     */
    int modifyCameraFence(@Param("eleFenceDO") EleFenceDO eleFenceDO);

    /**
     * 分页查询总数
     *
     * @param camera 查询条件
     * @return 总数
     */
    int queryCameraCount(@Param("camera") CameraVO camera);

    /**
     * 分页查询摄像头信息
     *
     * @param startIndex 开始索引
     * @param pageSize   页长
     * @param camera     查询条件
     * @return 查询结果
     */
    List<CameraVO> queryCameraByPage(@Param("startIndex") int startIndex, @Param("pageSize") int pageSize,
                                     @Param("camera") CameraVO camera);

    /**
     * 查询摄像头列表
     *
     * @return 摄像头列表
     */
    List<CameraVO> queryCameraList();

    /**
     * 查询视频列表
     *
     * @return 列表
     */
    List<AreaVideoVO> queryVideoList();

    /**
     * 分页查询车辆总数
     *
     * @return 车辆总数
     */
    int queryTruckCount();

    /**
     * 分页查询车辆列表
     *
     * @return 查询结果
     */
    List<String> queryTruckByPage(@Param("startIndex") int startIndex, @Param("pageSize") int pageSize);

    /**
     * 分页查询车辆进场时间总数
     *
     * @return 车辆总数
     */
    int queryTimeListByLicenseCount(@Param("license") String license);

    /**
     * 分页查询车辆进场时间列表
     *
     * @return 查询结果
     */
    List<TimeOfTruckVO> queryTimeListByLicenseByPage(@Param("startIndex") int startIndex,
                                                     @Param("pageSize") int pageSize,
                                                     @Param("license") String license);

    /**
     * 分页查询车辆进场时间总数
     *
     * @return 车辆总数
     */
    int queryTruckTrialCameraCount(@Param("truckInfo") TimeOfTruckVO truckInfo);

    /**
     * 分页查询车辆进场时间列表
     *
     * @return 查询结果
     */
    List<TruckTrialCameraVO> queryTruckTrialCameraByPage(@Param("startIndex") int startIndex,
                                                         @Param("pageSize") int pageSize,
                                                         @Param("truckInfo") TimeOfTruckVO truckInfo);

    /**
     * 查询摄像头围栏列表
     *
     * @return 摄像头围栏列表
     */
    List<CameraAreaListDTO> queryFenceList();

    /**
     * 插入货车经过摄像头区域
     * @param list
     */
    void addCameraRecordByTruck(List<CameraRecordInfoDO> list);

    AreaVideoVO queryVideoListV2(Map map);

    void deleteArea(Integer id);

    void editArea(PositionAreaDO positionArea);

    void addArea(PositionAreaDO positionArea);


    CameraVO selectCameraInfoByIp(String ip);
}
